home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / mmu / MuManual / Autodocs / fpsp.doc < prev    next >
Text File  |  2002-03-12  |  10KB  |  255 lines

  1. TABLE OF CONTENTS
  2.  
  3. fpsp.resource/--Background--
  4. fpsp.resource/FPSPMonadic
  5. fpsp.resource/FPSPDyadic
  6.  
  7. fpsp.resource/--Background--            fpsp.resource/--Background--
  8.  
  9.     PURPOSE
  10.  
  11.     This resource contains the emulation routines for FPU instructions
  12.     which are non-native for the 68040 or the 68060 processor.
  13.     This resource is - as all resources - not disk based. Instead, it
  14.     is build by the 68040 or 68060.library on startup. The CPU driver
  15.     libraries install the "FPSP" code as part of their initialization
  16.     process, such that every non-impelemented FPU instruction will be
  17.     emulated properly. However, this means that for every such 
  18.     instruction, the CPU has to go thru exception processing, and will
  19.     therefore stop multitasking when emulating a non-implemented in-
  20.     struction. Calling the fpsp routines directly thru the new
  21.     fpsp.resource will prevent this overhead and will gain some speed.
  22.         
  23.     A separate patch - the FastIEEE program - will patch the system
  24.     math libraries to make use of this resource.        
  25.  
  26.     The fpsp.resource is re-entrant, interrupt-callable code. The
  27.     resource offers only two functions which emulate monadic resp.
  28.     dyadic functions of the 68881/68882 FPU on a 68040 FPU.
  29.  
  30.     These functions are designed to be stub functions for assembly
  31.     language, they are not designed to be callable from C or any
  32.     other high-level language. Typical applications would call these
  33.     routines indirectly thru a link library which provides all
  34.     requires parameters. Direct calling from within application
  35.     programs is not desired.
  36.  
  37.     Moreover, the FPSP routines *do not* generate FPU exceptions them-
  38.     selves for speed reasons. If this is desired, the calling routine 
  39.     has to check the fpcr and the fpsr FPU registers manually and
  40.     has to generate the exceptions itself.
  41.  
  42. fpsp.resource/FPSPMonadic            fpsp.resource/FPSPMonadic
  43.  
  44.     NAME
  45.     FPSPMonadic    -    emulate a monadic 68881/68882 instruction
  46.  
  47.     SYNOPSIS
  48.     storeflag = FPSPMonadic ( opword, operand );
  49.     d0               d0       fp0
  50.  
  51.     BYTE FPSPMonadic ( UWORD , IEEEExtended );
  52.  
  53.     FUNCTION
  54.     This function emulates the 68881/68882 monadic instruction 
  55.     passed in in register d0, and performs the desired mathematical
  56.     operation on FP0. It returns the result in the FPU register FP0 
  57.     and FP1.
  58.  
  59.     INPUTS
  60.     opword    -    The extension word of a valid 68881/68882 
  61.             instruction. Valid extension words are found in
  62.             the motorola family guide or the 68881/68882
  63.             manual.
  64.             Note that this is actually the SECOND (!) opword
  65.             of the 68881/68882 instruction.
  66.             The bits of the opword have to be specified as
  67.             follows:
  68.  
  69.             Bits 15 and 13 must be cleared. The fpsp.resource
  70.             does not emulate FPU control instructions.
  71.             
  72.             R/M:    Source operand mode,     bit 14.
  73.                     Must be set to zero.
  74.             Source:    Source specifier,     bits 12 to 10.
  75.                     Must be set to zero.
  76.             Dest:    Destination specifier,    bits 9 to 7.
  77.                     Must be set to zero.
  78.             Inst:    Instruction field,    bits 5 to 0.
  79.                     Must be filled with the opcode of the
  80.                     desired instruction, see the motorola
  81.                     documents for the list. For the special
  82.                     case of FPSINCOS, the FPC field, bits
  83.                     2 to 0, has to be set to 001 to encode
  84.                     FP1 as secondary result register.
  85.  
  86.     operand    -    A valid IEEE extended precision number as argument
  87.             to the function to be performed.
  88.  
  89.     Secondary inputs are delivered in the FPU registers FPCR and FPSR,
  90.     namely to select the rounding precision and the behaiviour in case
  91.     of invalid arguments or infinite results.
  92.  
  93.     RESULTS
  94.     storeflag-    This is set to 0 in case the FPSP routine could
  95.             generate a result. THIS DOES NOT MEAN that the
  96.             arguments are valid. In case all exceptions are
  97.             disabled, the storeflag will always be returned as
  98.             zero, but the result might be infinite or a NAN.
  99.  
  100.     Secondary results are delivered in the FPU registers FP0, FP1 and
  101.     FPSR.
  102.  
  103.     FP0 contains the (primary) result of the 68881/68882 instruction
  104.     in case the storeflag is 0. *IT MIGHT WELL BE A NAN OR AN INF*
  105.  
  106.     In case the storeflag is non-zero, FP0 is undefined and the FPSP
  107.     routines indicate that an exception should be generated by the
  108.     caller. This happens only if an exception condition was detected
  109.     and the corresponding exception has been enabled in the FPCR 
  110.     passed in. In all other cases a NAN or a INF will be returned
  111.     and the storeflag will indicate a valid result.
  112.  
  113.     FP1 contains a secondary result, if any. The only case were FP1
  114.     is used is the FSINCOS instruction where the sine is returned in
  115.     FP0 and the cosine in FP1. Otherwise undefined.
  116.  
  117.     FPSR contains the FPU status similar to what a real 68881/68882 
  118.     would have returned. 
  119.  
  120.     NOTES
  121.     This function should not be called directly. It should either be
  122.     called by the system math libraries, or by compiler link libaries.
  123.  
  124.     Note that a non-zero store flag indicates that an exception 
  125.     condition was detected. NOTE THAT THE FPSP CODE DOES NOT CAUSE
  126.     AN EXCEPTION ITSELF. It is the responsibility of the caller to
  127.     check the FPSR, the FPCR and the storeflag to generate this
  128.     exception itself, if desireable. In case the storeflag is non-
  129.     zero, no useful result is returned in FP0 or FP1.
  130.  
  131.     Useful instruction opwords can be found in the motorola 
  132.     documentation, either the MC68K family guide, or in the 68881/
  133.     68882 manual.
  134.  
  135.     This function does not require a6 to be loaded with the FPSP 
  136.     resource base. It is interrupt-callable.
  137.  
  138.     BUGS
  139.  
  140.     SEE ALSO
  141.     libraries/68040.library, libraries/68060.library,
  142.     FPSPDyadic,
  143.     the Motorola 68881/68882 manual, the MC68K family guide.
  144.  
  145. fpsp.resource/FPSPDyadic            fpsp.resource/FPSPDyadic
  146.  
  147.     NAME
  148.     FPSPDyadic    -    emulate a dyadic 68881/68882 instruction
  149.  
  150.     SYNOPSIS
  151.     storeflag = FPSPDyadic ( opword, operand1, operand2 );
  152.     d0               d0       fp0        fp1
  153.  
  154.     BYTE FPSPDyadic ( UWORD , IEEEExtended , IEEEExtended );
  155.  
  156.     FUNCTION
  157.     This function emulates the 68881/68882 dyadic instruction 
  158.     passed in in register d0, and performs the desired mathematical
  159.     operation on FP0 and FP1. It returns the result in the FPU 
  160.     register FP0.
  161.  
  162.     INPUTS
  163.     opword    -    The extension word of a valid 68881/68882 
  164.             instruction. Valid extension words are found in
  165.             the motorola family guide or the 68881/68882
  166.             manual.
  167.             Note that this is actually the SECOND (!) opword
  168.             of the 68881/68882 instruction.
  169.             The bits of the opword have to be specified as
  170.             follows:
  171.  
  172.             Bits 15 and 13 must be cleared. The fpsp.resource
  173.             does not emulate FPU control instructions.
  174.  
  175.             R/M:    Source operand mode,     bit 14.
  176.                     Must be set to zero.
  177.             Source:    Source specifier,    bits 12 to 10.
  178.                     Must be set to one.
  179.             Dest:    Destination specifier,    bits 9 to 7.
  180.                     Must be set to zero.
  181.             Inst:    Instruction field,    bits 5 to 0.
  182.                     Must be filled with the opcode of the
  183.                     desired instruction, see the motorola
  184.                     documents for the list. For the special
  185.                     case of FPSINCOS, the FPC field, bits
  186.                     2 to 0, has to be set to 001 to encode
  187.                     FP1 as secondary result register.
  188.  
  189.     operand1-    A valid IEEE extended precision number as argument
  190.             to the function to be performed. This is the source
  191.             operand of dyadic instructions.
  192.  
  193.     operand2-    The destination operand of the dyadic 68881/68882
  194.             instructions.
  195.  
  196.     Secondary inputs are delivered in the FPU registers FPCR and FPSR,
  197.     namely to select the rounding precision and the behaiviour in case
  198.     of invalid arguments or infinite results.
  199.  
  200.     RESULTS
  201.     storeflag-    This is set to 0 in case the FPSP routine could
  202.             generate a result. THIS DOES NOT MEAN that the
  203.             arguments are valid. In case all exceptions are
  204.             disabled, the storeflag will always be returned as
  205.             zero, but the result might be infinite or a NAN.
  206.  
  207.     Secondary results are delivered in the FPU registers FP0, FP1 and
  208.     FPSR.
  209.  
  210.     FP0 contains the (primary) result of the 68881/68882 instruction
  211.     in case the storeflag is 0. *IT MIGHT WELL BE A NAN OR AN INF*
  212.  
  213.     In case the storeflag is non-zero, FP0 is undefined and the FPSP
  214.     routines indicate that an exception should be generated by the
  215.     caller. This happens only if an exception condition was detected
  216.     and the corresponding exception has been enabled in the FPCR 
  217.     passed in. In all other cases a NAN or a INF will be returned
  218.     and the storeflag will indicate a valid result.
  219.  
  220.     FP1 contains a secondary result, if any. As there is currently no
  221.     dyadic opcode with a secondary result, this register should be
  222.     ignored.
  223.  
  224.     FPSR contains the FPU status similar to what a real 68881/68882 
  225.     would have returned. 
  226.  
  227.     NOTES
  228.     This function should not be called directly. It should either be
  229.     called by the system math libraries, or by compiler link libaries.
  230.  
  231.     Note that a non-zero store flag indicates that an exception 
  232.     condition was detected. NOTE THAT THE FPSP CODE DOES NOT CAUSE
  233.     AN EXCEPTION ITSELF. It is the responsibility of the caller to
  234.     check the FPSR, the FPCR and the storeflag to generate this
  235.     exception itself, if desireable. In case the storeflag is non-
  236.     zero, no useful result is returned in FP0 or FP1.
  237.  
  238.     Useful instruction opwords can be found in the motorola 
  239.     documentation, either the MC68K family guide, or in the 68881/
  240.     68882 manual.
  241.  
  242.     This function does not require a6 to be loaded with the FPSP 
  243.     resource base. It is interrupt-callable.
  244.  
  245.     BUGS
  246.     Note that the encoding of the instruction to be performed
  247.     indicates that the source is delivered in register fp1, 
  248.     even though this function takes the source argument in
  249.     register fp0 and delivers the destination in fp0.
  250.  
  251.     SEE ALSO
  252.     libraries/68040.library, libraries/68060.library,
  253.     FPSPMonadic,
  254.     the Motorola 68881/68882 manual, the MC68K family guide.
  255.